#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Excel文件处理脚本
将行业指标数据从横向格式转换为纵向格式
"""

import pandas as pd
import os
from pathlib import Path
import traceback

def get_unit_mapping():
    """返回指标名称到单位的映射"""
    return {
        '存货周转率': '次',
        '带息负债比率': '%',
        '国有资本回报率': '%',
        '技术投入比率': '%',
        '经济增加值率': '%',
        '净资产收益率': '%',
        '利润总额增长率': '%',
        '两金占流动资产比重': '%',
        '流动资产周转率': '次',
        '全员劳动生产率': '万元/人',
        '速动比率': '',
        '现金流动负债比率': '%',
        '销售营业利润率': '%',
        '研发经费投入强度': '%',
        '已获利息倍数': '倍',
        '应收账款周转率': '次',
        '盈余现金保障倍数': '倍',
        '营业现金比率': '%',
        '营业总收入增长率': '%',
        '资本保值增值率': '%',
        '资产负债率': '%',
        '总资产收益率': '%',
        '总资产周转率': '次',
        'EBITDA率': '%',
        '百元收入支付的成本费用': '元'
    }

def process_excel_file(file_path):
    """处理单个Excel文件"""
    print(f"\n正在处理: {os.path.basename(file_path)}")
    
    try:
        # 读取数据表
        df = pd.read_excel(file_path, sheet_name='数据表')
        print(f"  数据形状: {df.shape}")
        
        # 获取指标名称和单位
        filename = os.path.basename(file_path)
        indicator_name = filename.replace('-全行业.xlsx', '')
        unit_mapping = get_unit_mapping()
        unit = unit_mapping.get(indicator_name, '')
        
        if unit:
            full_indicator_name = f"{indicator_name}({unit})"
        else:
            full_indicator_name = indicator_name
        
        print(f"  指标名称: {full_indicator_name}")
        
        # 第一行包含列标题
        header_row = df.iloc[0]
        
        # 分析列结构，找到不同行业的评级列
        column_info = {}
        for col_idx, header in enumerate(header_row):
            if isinstance(header, str) and ':' in header:
                parts = header.split(':')
                if len(parts) >= 4:  # 格式: 指标:行业:全行业:评级
                    industry = parts[1]
                    rating = parts[3]
                    
                    if industry not in column_info:
                        column_info[industry] = {}
                    column_info[industry][rating] = col_idx
        
        print(f"  发现行业数量: {len(column_info)}")
        
        result_data = []
        
        # 处理每个行业
        for industry, ratings in column_info.items():
            # 检查是否有足够的评级数据
            if len(ratings) < 3:
                continue
            
            # 处理每一年的数据（从第2行开始）
            for row_idx in range(1, len(df)):
                year_value = df.iloc[row_idx, 0]  # 第一列是年份
                
                # 跳过空值或非日期值
                if pd.isna(year_value):
                    continue
                
                # 提取年份
                try:
                    year_str = str(year_value)
                    if len(year_str) >= 4:
                        year = int(year_str[:4])
                    else:
                        continue
                except:
                    continue
                
                # 构建数据记录
                record = {
                    '行业名称': industry,
                    '指标名称': full_indicator_name,
                    '年份': year,
                    '优秀值': '',
                    '良好值': '',
                    '平均值': '',
                    '较低值': '',
                    '较差值': ''
                }
                
                # 填充各评级的值
                for rating, col_idx in ratings.items():
                    value = df.iloc[row_idx, col_idx]
                    if not pd.isna(value):
                        record[rating] = value
                
                result_data.append(record)
        
        print(f"  提取记录数: {len(result_data)}")
        return result_data
        
    except Exception as e:
        print(f"  处理文件出错: {e}")
        traceback.print_exc()
        return []

def main():
    """主函数"""
    print("开始处理Excel文件...")
    
    # 输入目录
    input_dir = Path("行业均值/全行业财务绩效平均指标标准值")
    
    if not input_dir.exists():
        print(f"错误: 目录不存在 {input_dir}")
        return
    
    all_data = []
    
    # 处理所有Excel文件
    for excel_file in input_dir.glob("*.xlsx"):
        if excel_file.name.startswith('~'):
            continue
        
        file_data = process_excel_file(excel_file)
        all_data.extend(file_data)
    
    # 保存结果
    if all_data:
        df_result = pd.DataFrame(all_data)
        
        # 排序：按行业名称、指标名称、年份排序
        df_result = df_result.sort_values(['行业名称', '指标名称', '年份'])
        
        # 保存为Excel文件
        output_file = "整理后的行业指标数据.xlsx"
        with pd.ExcelWriter(output_file, engine='openpyxl') as writer:
            df_result.to_excel(writer, sheet_name='整理后数据', index=False)
        
        print(f"\n处理完成!")
        print(f"总记录数: {len(df_result)}")
        print(f"输出文件: {output_file}")
        
        # 显示统计信息
        print(f"\n统计信息:")
        print(f"  不同行业数量: {df_result['行业名称'].nunique()}")
        print(f"  不同指标数量: {df_result['指标名称'].nunique()}")
        
        print(f"\n年份范围:")
        years = df_result['年份'].dropna().unique()
        print(f"  {min(years)} - {max(years)}")
        
        print(f"\n数据预览:")
        print(df_result.head(10).to_string())
        
    else:
        print("没有处理到任何数据")

if __name__ == "__main__":
    main()
